package com.unitd.frame.spring.prop;

import com.google.common.collect.Maps;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

import java.util.Map;
import java.util.Properties;

/**
 * @desc 继承自Spring的PropertyPlaceholderConfigurer类,用于加载应用的时候获取属性文件配置信息
 * @filename MyPropertyPlaceholderConfigurer.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2016/10/21
 */
public class MyPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

	/** 通过Spring加载的属性文件的属性集合 */
	public final static Map<String, Object> PROPERTY_DATA_MAP = Maps.newHashMap();

	/**
	 * @desc 重写Spring的PropertyPlaceholderConfigurer类的属性文件加载处理方法
	 * @param beanFactory Spring的Bean工厂
	 * @param props Properties属性文件属性集合
	 * @throws BeansException
	 */
	@Override
	public void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {
		super.processProperties(beanFactory, props);
		for (Map.Entry<Object, Object> entry : props.entrySet()) {
			PROPERTY_DATA_MAP.put(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
		}
	}

	/**
	 * @desc 根据读取到的配置文件对象信息,根据key获取对应的属性值
	 * @param key 属性key
	 * @return 数据源属性值
	 */
	public static String get(String key) {
		return String.valueOf(PROPERTY_DATA_MAP.get(key));
	}

	/**
	 * @desc 根据读取到的配置文件对象信息,根据key获取对应的属性值
	 * @param key 属性key
	 * @param defaulttVal 当属性值为空时,默认值
	 * @return 数据源属性值
	 */
	public static String get(String key, String defaulttVal) {
		if (defaulttVal == null) {
			return get(key);
		}

		if(PROPERTY_DATA_MAP.get(key)==null) {
			return defaulttVal;
		} else {
			return String.valueOf(PROPERTY_DATA_MAP.get(key));
		}
	}

	/**
	 * @desc 判断读取到的配置文件对象信息中是否包含制定属性key的属性对象
	 * @param key 属性key
	 * @return boolean
	 */
	public static boolean containKey(String key) {
		return get(key) != null;
	}
}